#ifndef HEAD_h
#define HEAD_H

#include "queue.h"

// 定义一个结构体，用来维护主线程和子线程共有的资源
typedef struct status_s
{
    // list :用来记录子线程的id
    pthread_t  *list;

    // num : 用来记录子线程的个数
    int num;

    // queue: 队列用来维护当前生产者-消费者模型的net_fd.用来主子线程间的操作
    queue_t queue;

    // lock: 锁用于互斥操作一些共享的资源
    pthread_mutex_t lock;

    // cond: 条件变量用于同步唤醒的机制
    pthread_cond_t cond;
}status_t;

// 初始化子线程
// 第一个参数：主子线程共有的资源
// 第二个参数：子线程的个数:
int initStatus(status_t *status, int num);

// 初始化socket对象和IP地址与端口,用来三次握手
// 第一个参数：用于交流的socket_fd对象
// 第二个参数: 交互的端口
// 第三个参数：服务端的IP地址
int initSocket(int *socket_fd, char *port, char *ip);

// 用于监听新链接的socket对象,文件描述符
// 第一个参数：epoll对象的文件描述符
// 第二个参数：要监听的文件描述符
int addEpoll(int epoll_fd, int fd);

// 子线程的入口函数
void *threadMain(void *p);

// 和客户端进行交互(发文件)
// 参数：用来和客户端指定交互的net_fd
int SendFile(int net_fd);
#endif
